#!/usr/bin/env python
#coding: utf-8
'''
Created on 2017年2月17日

@author: Administrator
'''

import djcelery
import os
import sys

#登录url
LOGIN_URL = '/account/login/'

#登录成功后跳转的url
LOGIN_SUCESS_URL = "http://www.auoffice.com"

#项目绝对目录
PROJECT_ROOT = os.path.normpath(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))))

# Add projects to python path
PROJECT_PATH = os.path.join(PROJECT_ROOT, 'projects')
sys.path.insert(1, PROJECT_PATH)

# Add apps to python path
APP_PATH = os.path.join(PROJECT_ROOT, 'apps')
sys.path.insert(1, APP_PATH)

# Add libs to python path
LIB_PATH = os.path.join(PROJECT_ROOT, 'libs')
sys.path.insert(1, LIB_PATH)

#版本号
PROJECT_VERSION = "0000v00"

#当DEBUG为False而views发生异常的时候发email通知这些开发人员
ADMINS = (
    ('xiaojun-msyc', 'xiaojun-hu@msyc.cc'),
    ('xiaojun-qq', '2156731949@qq.com'),
)

#默认文件存储
DEFAULT_FILE_STORAGE = 'common.files.storage.LFSStorage'

#和ADMINS类似,并且结构一样,当出现'broken link'的时候给manager发邮件.
MANAGERS = ADMINS

#一个绝对路径, 用于保存媒体文件
MEDIA_ROOT = '/data/media/auoffice/'

#处理媒体服务的URL(媒体文件来自 MEDIA_ROOT)
#MEDIA_URL = 'http://www.auoffice.com/'
MEDIA_URL = 'http://xiuzan.oss-cn-shenzhen.aliyuncs.com/'

#命令操作用户
DEFAULT_COMMAND_USER = 'command@auof.com'
#只有以列表中的元素为前缀的模板Django才可以以``{% ssi %}`` 形式访问 . 
#出于安全考虑, 在不应该访问时,即使是模板的作者也不能访问这些文件
#ALLOWED_INCLUDE_ROOTS = ((MEDIA_ROOT),)

#当有人从一个有效Django-powered页面访问另一个Django-powered页面时发现404错误(也就是发现一个死链接)时, 
#是否发送一封邮件给 MANAGERS. 当且仅当 安装有 CommonMiddleware 时该选项才有效
SEND_BROKEN_LINK_EMAILS = False

DOMAIN_NAME = 'www.auoffice.com'

#session cookies 的生命周期(一天）
SESSION_COOKIE_AGE = 60 * 60 * 24

#Session的cookie保存在浏览器上时的key，即：sessionid＝随机字符串
SESSION_COOKIE_NAME = "sessionid"

#引擎
SESSION_ENGINE = 'django.contrib.sessions.backends.db'

#session cookies 有效的域
SESSION_COOKIE_DOMAIN = 'www.auoffice.com'

#是否关闭浏览器使得Session过期（默认）
SESSION_EXPIRE_AT_BROWSER_CLOSE = True

#用来发送错误信息的邮件地址, 比如发送给 ADMINS 和 MANAGERS 的邮件
SERVER_EMAIL = '15900407009@sina.cn'

#用来发送 e-mail 的主机
EMAIL_HOST = 'smtp.sina.cn'

#SMTP 服务器所使用的端口号
EMAIL_PORT = 25

# SMTP 服务器使用的用户名. 如果为空, Django 不会尝试进行认证.
EMAIL_HOST_USER = '15900407009@sina.cn'

#SMTP 服务器使用的密码. 如果为空, Django 不会尝试进行认证
EMAIL_HOST_PASSWORD = 'sina15900407009a'

#是否使用TLS(安全)当与SMTP服务器的连接 
EMAIL_USE_TLS = False   
#1.6 以下的不支持qq邮箱
EMAIL_USE_SSL = True
#编码格式
DEFAULT_CHARSET = 'utf-8'
#邮件头
EMAIL_SUBJECT_PREFIX = u"【django错误邮件】"

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'm7d1ipz)438zwzlm4nlgs=dsx$ey^82y_sbueq)%h#)w#jtg#@'

# Application definition
DEFAULT_JINJA2_TEMPLATE_INTERCEPT_RE = r'^(?!(admin|registration)/).*'

# DEBUG配置为True的时候会暴露出一些出错信息或者配置信息以方便调试.
#但是在上线的时候应该将其关掉，防止配置信息或者敏感出错信息泄露.
DEBUG = False

#同样是一个DEBUG开关,若为True,DEBUG信息在触发异常之后,会显示在网页上
TEMPLATE_DEBUG = DEBUG

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
#    'corsheaders.middleware.CorsMiddleware',
#    'django.middleware.common.CommonMiddleware',
)


TEMPLATE_LOADERS = (
    'django_jinja.loaders.AppLoader',
    'django_jinja.loaders.FileSystemLoader',
#    'django.template.loaders.app_directories.Loader',
#    'django.template.loaders.filesystem.Loader',
)

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'django.contrib.messages.context_processors.messages',
    'django.core.context_processors.media',
    'common.core.context_processors.static',
    'django.core.context_processors.request',
    'django.core.context_processors.debug',
)

#ALLOWED_HOSTS是为了限定请求中的host值,以防止黑客构造包来发送请求.只有在列表中的host才能访问.
#强烈建议不要使用*通配符去配置,#另外当DEBUG设置为False的时候必须配置这个配置.否则会抛出异常
ALLOWED_HOSTS = ["www.auoffice.com", "static.auoffice.com", "admin.auoffice.com"]

# Application definition
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    #第三方
    'django_jinja',
    'south',
    'djcelery',
#    'corsheaders',
#    'redis_admin',
    #apps
    'common', #公共
    'account', #账号
    'attachment', #附件
    'ioffice', #
    'funcresource', #功能资源
    'icon', #图标
    'article', #文章
    'comment', #评论
    'message', #消息（短信、邮件）
    'like', #点赞、收藏
    'error', #错误页面
)

AUTH_PROFILE_MODULE = 'account.Profile'


WSGI_APPLICATION = 'wsgi.application'

ROOT_URLCONF = 'auoffice.urls'
# Database
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'OPTIONS': {
            'init_command': 'SET storage_engine=INNODB',
            'charset': 'utf8mb4',
        },
        'NAME': 'auoffice', # Or path to database file if using sqlite3.
        'USER': 'auoffice', # Not used with sqlite3.
        'PASSWORD': 'AzMNTOk%', # Not used with sqlite3.
        'HOST': '127.0.0.1', # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '3306',
        'CONN_MAX_AGE':600, #持久化连接
    }
}

#CACHE
CACHES = {
    'default': {
        'BACKEND': 'redis_cache.cache.RedisCache',
        'LOCATION': '127.0.0.1:6379',
        "OPTIONS": {
            'DB': 1,
            "CLIENT_CLASS": "redis_cache.client.DefaultClient",
        },
    },
}

# djcelery 配置
djcelery.setup_loader()
#BROKER_URL = 'redis://:DhG7n&5q@127.0.0.1:6379/3'
BROKER_URL = 'redis://127.0.0.1:6379/3'
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600}
CELERY_IGNORE_RESULT = True
#日志信息格式配置
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '%(process)d - [%(levelname)s] [%(asctime)s] - [%(pathname)s:%(lineno)d] - %(message)s',
            'datefmt' : '%Y-%m-%d %H:%M:%S',
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        },
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'handlers': {
        'console': {
            'level': 'INFO',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
        },
        'null': {
            'class': 'django.utils.log.NullHandler',
        },
        'mail_admins': {
            'include_html': True,
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'common.utils.log.AdminCeleryEmailHandler'
#            'class': 'django.utils.log.AdminEmailHandler'
        },
        'info_handler': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/var/log/django/info.log',
            'formatter': 'verbose',
        },
        'error_handler': {
            'level': 'WARNING',
            'class': 'logging.FileHandler',
            'filename': '/var/log/django/error.log',
            'formatter': 'verbose',
        },
        'task_info_handler': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/var/log/django/task.info.log',
            'formatter': 'verbose',
        },
        'task_error_handler': {
            'level': 'WARNING',
            'class': 'logging.FileHandler',
            'filename': '/var/log/django/task.error.log',
            'formatter': 'verbose',
        },
        'cron_info_handler': {
            'level': 'INFO',
            'class': 'logging.FileHandler',
            'filename': '/var/log/django/cron.info.log',
            'formatter': 'verbose',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['info_handler', 'error_handler'],
            'level': 'INFO',
            'propagate': True,
        },
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
        'django.task': {
            'handlers': ['task_info_handler', 'task_error_handler'],
            'level': 'INFO',
            'propagate': True,
        },
        'django.cron': {
            'handlers': ['cron_info_handler'],
            'level': 'INFO',
            'propagate': True,
        },
        'celery': {
            'handlers': ['task_info_handler', 'task_error_handler'],
            'level': 'INFO',
            'propagate': True,
        },
        'django.db': {  
            # django also has database level logging  
        },
    }
}

#
REDIS_TIMEOUT = 7 * 24 * 60 * 60
CUBES_REDIS_TIMEOUT = 60 * 60
NEVER_REDIS_TIMEOUT = 365 * 24 * 60 * 60

#直接读入内存的最大上传文件大小（字节数）。当大于此值时，文件存放到磁盘。默认2.5M字节
FILE_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 10

#比FILE_UPLOAD_MAX_MEMORY_SIZE大的文件将被临时保存的地方。默认是系统标准的临时路径
FILE_UPLOAD_TEMP_DIR = os.path.join("data", "media", "auoffice", 'tmp/')

#上传文件的处理器
FILE_UPLOAD_HANDLERS = (
    "django.core.files.uploadhandler.MemoryFileUploadHandler",
    "django.core.files.uploadhandler.TemporaryFileUploadHandler",
)

# 在发布时是否开启grunt打包压缩静态文件功能
GRUNT_ON = True

#
STATIC_GRUNT_ROOT = os.path.join(os.path.dirname(PROJECT_ROOT), 'frontend', 'auoffice', 'static')

#静态文件根目录
STATIC_ROOT = "/data/media/auoffice/static/"
##静态文件URL
STATIC_URL = 'http://static.auoffice.com/static/'


#静态文件目录
STATICFILES_DIRS = (
    os.path.join(STATIC_GRUNT_ROOT, 'tmp'),
)

# Internationalization
# https://docs.djangoproject.com/en/1.8/topics/i18n/

LANGUAGE_CODE = 'zh-CN'

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = False
#时间格式化
DATETIME_FORMAT = 'Y-m-d H:i:s'
#以该tuple中元素为开头的 URL会被 404 e-mailer 忽略
#IGNORABLE_404_STARTS = ()

#以该tuple中元素为结尾的 URL会被 404 e-mailer 忽略
#IGNORABLE_404_ENDS = ()

#OSS配置
ALIYUN_ACCESS_KEY_ID = 'LTAIuZepGOmW7hDq'
ALIYUN_ACCESS_KEY_SECRET = 'PxnZqbaReboy6aFPdFiXSE2HjF754Z'
OSS_MEIDA_BUCKET_NAME = 'xiuzan'
OSS_BUCKET_ENDPOINT = 'oss-cn-shenzhen.aliyuncs.com'

# 全文索引 Sphinx 
SPHINX_SERVER = '127.0.0.1'
SPHINX_PORT = 9312

#ES(Elasticsearch)
ELASTICSEARCH_HOST = '127.0.0.1:9200'

#错误页面模板
ERROR_TEMPLATE = ''

#错误信息
ERROR = {
    'SUCC': {'code': '10000', 'msg': u'成功'},
    'ERROR': {'code': '10001', 'msg': u'未知错误'},
    'PARA_ERR': {'code': '10002', 'msg': u'表单参数错误'},
    'NOT_EXIST_ERR': {'code': '10003', 'msg': u'记录不存在'},
    'PERM_ERR': {'code': '10004', 'msg': u'没有权限进行该操作'},
    'SYS_ERR': {'code': '10005', 'msg': u'系统繁忙'},
    'EXIST_ERR': {'code': '10006', 'msg': u'记录已存在'},
    'FORBIDDEN': {'code': '10007', 'msg': u'被禁止'},
    'MAINTAINANCE': {'code': '10008', 'msg': u'功能维护'},
    'FORBIDDEN_WORD_ERR': {'code': '10009', 'msg': u'内容中包含敏感词'},
    'STATE_ERR': {'code': '10010', 'msg': u'状态错误'},
    'VERIFYCODE_ERR':{'code': '10011', 'msg': u'验证码错误'},
    'NUM_LIMIT_ERR': {'code': '10012', 'msg': u'超出数量限制'},
    'OVERFLOW_MAX_LENGTH_ERR': {'code': '10013', 'msg': u'超出内容长度限制'},
    'UNSUPPORT_ERR': {'code': '10014', 'msg': u'不支持该功能'},
}

# 当需要命令行操作数据库时，切换数据库账号为开发者账号，支持数据库表结构变更
#if ('migrate' in sys.argv) or ('syncdb' in sys.argv):
#    DATABASES['default']['USER'] = ''
#    DATABASES['default']['PASSWORD'] = ''
